﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;
using System.Data.SqlClient;
using System.Data;
using System.Security.Cryptography;
using CM.BL.BE;

namespace DECOR.DL.DALC.MSSQL
{
    public class UsuarioDALC : DALGC, IUsuarioDALC
    {
        #region IUsuarioDALC Members

        public List<UsuarioBE> listar()
        {
            List<UsuarioBE> lstUsuarios = new List<UsuarioBE>();
            try
            {
                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios").Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    UsuarioBE objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    lstUsuarios.Add(objUsuario);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lstUsuarios;
        }

        public List<UsuarioBE> listar(UsuarioBE pObjUsuarioWeb)
        {
            List<UsuarioBE> lstUsuarios = new List<UsuarioBE>();
            try
            {
                Object p1 = DBNull.Value, p2 = DBNull.Value, p3 = DBNull.Value, p4 = DBNull.Value, p5 = DBNull.Value, p6 = DBNull.Value;
                if (pObjUsuarioWeb.Usuario_id > 0)
                {
                    p1 = new SqlParameter("@lpUsuario_id", pObjUsuarioWeb.Usuario_id);
                }
                if (!string.IsNullOrEmpty(pObjUsuarioWeb.Usuario))
                {
                    p2 = new SqlParameter("@lpUsuario", pObjUsuarioWeb.Usuario);
                }
                if (!string.IsNullOrEmpty(pObjUsuarioWeb.Correo))
                {
                    p3 = new SqlParameter("@lpCorreo", pObjUsuarioWeb.Correo);
                }
                if (!string.IsNullOrEmpty(pObjUsuarioWeb.Nombre))
                {
                    p4 = new SqlParameter("@lpNombre", pObjUsuarioWeb.Nombre);
                }
                if (pObjUsuarioWeb.UsuarioSAP_id > 0)
                {
                    p5 = new SqlParameter("@lpUsuarioSAP_id", pObjUsuarioWeb.UsuarioSAP_id);
                }

                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios", p1, p2, p3, p4, p5).Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    UsuarioBE objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    lstUsuarios.Add(objUsuario);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lstUsuarios;
        }

        public List<UsuarioBE> buscarXNombre(string pNombre)
        {
            List<UsuarioBE> lstUsuarios = new List<UsuarioBE>();
            try
            {
                SqlParameter p1 = new SqlParameter("@lpNombre", pNombre);
                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios", p1).Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    UsuarioBE objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    lstUsuarios.Add(objUsuario);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lstUsuarios;
        }

        public List<UsuarioBE> buscarXUsuarioSAP(int pUsuarioSAP_id)
        {
            List<UsuarioBE> lstUsuarios = new List<UsuarioBE>();
            try
            {
                SqlParameter p1 = new SqlParameter("@lpUsuarioSAP_id", pUsuarioSAP_id);
                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios", p1).Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    UsuarioBE objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    lstUsuarios.Add(objUsuario);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lstUsuarios;
        }

        public List<UsuarioBE> buscarXCorreo(string pCorreo)
        {
            List<UsuarioBE> lstUsuarios = new List<UsuarioBE>();
            try
            {
                SqlParameter p1 = new SqlParameter("@lpCorreo", pCorreo);
                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios", p1).Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    UsuarioBE objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    lstUsuarios.Add(objUsuario);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lstUsuarios;
        }

        public UsuarioBE leer(int pUsuario_id)
        {
            UsuarioBE objUsuario = null;
            try
            {
                SqlParameter p1 = new SqlParameter("@lpUsuario_id", pUsuario_id);
                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios", p1, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value).Tables[0];
                if (dt.Rows.Count == 1)
                {
                    DataRow dr = dt.Rows[0];
                    objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    objUsuario.AdminUser = Convert.ToBoolean(dr["adminUser"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return objUsuario;
        }

        public UsuarioBE leer(string pUsuario)
        {
            UsuarioBE objUsuario = null;
            try
            {
                SqlParameter p1 = new SqlParameter("@lpUsuario", pUsuario);
                DataTable dt = SqlHelper.ExecuteDataset(this.UsersConnStr, "usps_usuarios", DBNull.Value, p1, DBNull.Value, DBNull.Value, DBNull.Value).Tables[0];
                if (dt.Rows.Count == 1)
                {
                    DataRow dr = dt.Rows[0];
                    objUsuario = new UsuarioBE();
                    objUsuario.Usuario_id = Convert.ToInt32(dr["usuario_id"]);
                    objUsuario.Usuario = dr["usuario"].ToString();
                    objUsuario.Correo = dr["correo"].ToString();
                    objUsuario.Nombre = dr["nombre"].ToString();
                    objUsuario.UsuarioSAP_id = Convert.ToInt32(dr["usuarioSAP_id"].ToString());
                    objUsuario.AdminUser = Convert.ToBoolean(dr["adminUser"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return objUsuario;
        }

        public void agregar(UsuarioBE objUsuario)
        {
            try
            {
                SqlParameter p0 = new SqlParameter("@lpUsuario_id", objUsuario.Usuario_id);
                SqlParameter p1 = new SqlParameter("@lpUsuario", objUsuario.Usuario);
                SqlParameter p2 = new SqlParameter("@lpClave", objUsuario.Clave);
                SqlParameter p3 = new SqlParameter("@lpCorreo", objUsuario.Correo);
                SqlParameter p4 = new SqlParameter("@lpNombre", objUsuario.Nombre);
                SqlParameter p5 = new SqlParameter("@lpUsuarioSAP_id", objUsuario.UsuarioSAP_id);
                SqlParameter p6 = new SqlParameter("@lpAdminUser", objUsuario.AdminUser);
                int retval = SqlHelper.ExecuteNonQuery(this.UsersConnStr, "uspi_usuarios", p0, p1, p2, p3, p4, p5, p6);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool actualizar(UsuarioBE objUsuario)
        {
            int retval = 0;
            try
            {
                SqlParameter p0 = new SqlParameter("@lpUsuario_id", objUsuario.Usuario_id);
                SqlParameter p1 = new SqlParameter("@lpUsuario", objUsuario.Usuario);
                SqlParameter p2 = new SqlParameter("@lpClave", objUsuario.Clave);
                SqlParameter p3 = new SqlParameter("@lpCorreo", objUsuario.Correo);
                SqlParameter p4 = new SqlParameter("@lpNombre", objUsuario.Nombre);
                SqlParameter p5 = new SqlParameter("@lpUsuarioSAP_id", objUsuario.UsuarioSAP_id);
                SqlParameter p6 = new SqlParameter("@lpAdminUser", objUsuario.AdminUser);
                retval = SqlHelper.ExecuteNonQuery(this.UsersConnStr, "uspu_usuarios", p0, p1, p2, p3, p4, p5, p6);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return (retval != 0 ? true : false);
        }

        public void eliminar(int pUsuario_id)
        {
            try
            {
                SqlParameter p1 = new SqlParameter("@lpUsuario_id", pUsuario_id);
                int retval = SqlHelper.ExecuteNonQuery(this.UsersConnStr, "uspi_usuarios", p1);

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool login(UsuarioBE objUsuario)
        {
            int retval = 0;
            try
            {
                SqlParameter p1 = new SqlParameter("@lpUsuario", objUsuario.Usuario);
                SqlParameter p2 = new SqlParameter("@lpClave", objUsuario.Clave);
                Object p3 = DBNull.Value;
                if (objUsuario.AdminUser)
                {
                    p3 = new SqlParameter("@lpAdmin", objUsuario.AdminUser);
                }
                retval = Convert.ToInt32(SqlHelper.ExecuteScalar(this.UsersConnStr, "usps_login", p1, p2, p3));

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return (retval > 0 ? true : false);
        }

        #endregion

        #region IUsuarioDALC Members


        public string login(ref UsuarioWebBE pObjUsuarioWebBE)
        {
            throw new NotImplementedException();
        }
        public string actualizar(RfcConfigParametersBE pObjUsuarioWebBE)
        {
            throw new NotImplementedException();
        }

        //WEBDIST
        public List<string> ObtenerOpcionesPorUsuario()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IUsuarioDALC Members



        #endregion

        #region Miembros de IUsuarioDALC


        public string login(ref CM.BL.BE.RfcConfigParametersBE pObjUsuarioWebBE)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Miembros de IUsuarioDALC


        public string logout(string id)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
